테스트 데이터셋 생성하기

Anthropic
Claude에서 열기
이 강좌에 대해 질문하기
노트 복사
LLM용 전체 강좌 노트 복사

커스텀 프롬프트 평가 워크플로우를 구축하려면, 먼저 탄탄한 프롬프트를 만들고 그 성능을 측정할 테스트 데이터를 생성해야 합니다. AWS 전용 코드 작성을 돕는 프롬프트에 대한 평가 시스템을 구축하는 과정을 살펴보겠습니다.

목표 설정

우리의 프롬프트는 AWS 사용 사례에 대해 다음 세 가지 유형의 출력을 작성하는 데 사용자를 도와야 합니다:

  • Python 코드
  • JSON 구성 파일
  • 정규 표현식

핵심 요구사항은 사용자가 작업 도움을 요청할 때, 추가적인 설명이나 헤더, 푸터 없이 위 형식 중 하나로 깔끔한 출력을 반환하는 것입니다.

다음은 시작 프롬프트(버전 1)입니다:

prompt = f"""
Please provide a solution to the following task:
{task}
"""

평가 데이터셋 생성

평가 데이터셋은 프롬프트에 입력할 데이터들을 담고 있습니다. 프롬프트와 입력의 각 조합에 대해 프롬프트를 실행하고 결과를 분석합니다.

데이터셋은 JSON 객체 배열로 구성되며, 각 객체에는 Claude가 수행할 작업을 설명하는 "task" 속성이 포함됩니다. 이 데이터셋은 직접 작성하거나 Claude를 활용해 자동으로 생성할 수 있습니다.

테스트 데이터를 생성하는 경우이므로, 전체 Claude 모델 대신 Haiku처럼 더 빠른 모델을 사용하기에 적합한 기회입니다.

코드로 테스트 데이터 생성하기

테스트 데이터셋을 자동으로 생성하는 함수를 만들어 보겠습니다. 먼저 Claude와 함께 사용할 헬퍼 함수들이 필요합니다:

def add_user_message(messages, text):
    user_message = {"role": "user", "content": text}
    messages.append(user_message)

def add_assistant_message(messages, text):
    assistant_message = {"role": "assistant", "content": text}
    messages.append(assistant_message)

def chat(messages, system=None, temperature=1.0, stop_sequences=[]):
    params = {
        "model": model,
        "max_tokens": 1000,
        "messages": messages,
        "temperature": temperature
    }
    if system:
        params["system"] = system
    if stop_sequences:
        params["stop_sequences"] = stop_sequences
    
    response = client.messages.create(**params)
    return response.content[0].text

이제 데이터셋 생성 함수를 작성하겠습니다:

def generate_dataset():
    prompt = """
Generate an evaluation dataset for a prompt evaluation. The dataset will be used to evaluate prompts that generate Python, JSON, or Regex specifically for AWS-related tasks. Generate an array of JSON objects, each representing task that requires Python, JSON, or a Regex to complete.

Example output:
```json
[
  {
    "task": "Description of task",
  },
  ...additional
]
```

* Focus on tasks that can be solved by writing a single Python function, a single JSON object, or a single regex
* Focus on tasks that do not require writing much code

Please generate 3 objects.
"""

JSON 응답을 올바르게 파싱하기 위해 프리필링(prefilling)과 중지 시퀀스(stop sequences)를 사용합니다:

    messages = []
    add_user_message(messages, prompt)
    add_assistant_message(messages, "```json")
    text = chat(messages, stop_sequences=["```"])
    return json.loads(text)

데이터셋 생성 테스트

함수를 실행하여 어떤 테스트 케이스가 생성되는지 확인해 보겠습니다:

dataset = generate_dataset()
print(dataset)

이 코드는 목표 출력 유형인 Python 함수, JSON 구성, AWS 전용 작업을 위한 정규 표현식을 각각 다루는 세 가지 테스트 케이스를 반환해야 합니다.

데이터셋 저장

데이터셋이 준비되면, 나중에 평가 시 쉽게 불러올 수 있도록 파일로 저장합니다:

with open('dataset.json', 'w') as f:
    json.dump(dataset, f, indent=2)

이 코드는 노트북과 같은 디렉터리에 dataset.json 파일을 생성하며, 프롬프트 평가에 사용할 작업 목록이 담겨 있습니다.

이 기반을 갖추면, 다양한 AWS 관련 코딩 작업에서 프롬프트의 성능을 체계적으로 평가하기 위한 테스트 데이터를 생성할 수 있습니다.